﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MakeIT.SGI.ERP.Negocios;
using MakeIT.SGI.ERP.Entidades;
using MakeIT.Framework.Util;
using AjaxControlToolkit;

namespace MakeIT.SGI.ERP.Apresentacao
{
    public partial class CaixaOperacional : System.Web.UI.Page
    {
        UsuarioVO usuarioVO = null;
        protected SgiDAOT SgiDAOT = null;

        protected decimal totalDebito = 0;
        protected decimal totalCredito = 0;
        protected decimal total = 0;

        protected void Page_Load(object sender, EventArgs e)
        {
            this.SgiDAOT = new SgiDAOT();
            usuarioVO = (UsuarioVO)this.Session["userActive"];

            painelExibido(0, String.Empty);

            if (usuarioVO == null)
                Response.Redirect("~/Gestor.aspx");

            if (!IsPostBack)
            {
                carregaCaixas();
                carregaSupervisor();
                limpaCampos();
            }
        }

        protected void Page_Unload(object sender, EventArgs e)
        {
            try
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.closeDAO();
            }
            catch (Exception ex) { }
        }

        protected void carregaCaixas()
        {
            carregaCaixaAberto();
            carregaCaixaDisponivel();
        }

        protected void carregaCaixaAberto()
        {
            dlCxAberto.DataSource = null;

            List<CaixaVO> cxVOLista = new List<CaixaVO>();

            ColaboradorVO cVO = SgiDAOT.getColaborador(null, null, null, usuarioVO.idPessoa);

            if (cVO == null)
            {
                Util.ExibeAlertRedirecionamento(this, "Usuário logado não vinculado com um colaborador! Não é possível continuar", "Gestor.aspx");
            }
            else
            {
                foreach (CaixaturnoVO ctVOItem in this.SgiDAOT.getCaixaturnos(null, null, cVO.idColaborador, null, null, null, null, 'A'))
                {
                    CaixaVO cxVO = this.SgiDAOT.getCaixa(ctVOItem.idCaixa, null, null, null, ctVOItem.situacao);

                    if (cxVO != null)
                        cxVOLista.Add(cxVO);
                }
            }

            dlCxAberto.DataSource = cxVOLista;
            dlCxAberto.DataBind();

            if (cxVOLista.Count > 0)
            {
                Button btAberto = new Button();
                btAberto.CommandArgument = Convert.ToString(cxVOLista[0].idCaixa);
                btCxAberto_Click(btAberto, null);
            }

        }

        protected void carregaCaixaDisponivel()
        {
            dlCxDisponivel.DataSource = this.SgiDAOT.getCaixas(null, null, null, null, 'F');
            dlCxDisponivel.DataBind();
        }

        protected void carregaSupervisor()
        {
            PessoaVO pVO = PessoaVO.CreateVO();
            pVO.idPessoa = -1;
            pVO.pessoa = "";

            List<PessoaVO> pVOLista = new List<PessoaVO>();
            pVOLista.Add(pVO);

            PerfiladmVO paVO = this.SgiDAOT.getPerfiladm(null, "Supervisor.Caixa");

            if (paVO != null)
            {
                foreach (PerfiladmxpessoaVO ppVOItem in this.SgiDAOT.getPerfiladmxpessoas(null, null, paVO.idPerfilAdm))
                {
                    ColaboradorVO cVOTemp = this.SgiDAOT.getColaborador(null, null, null, ppVOItem.idPessoa, null, usuarioVO.idPessoaVO.idFilial, true);

                    if (cVOTemp != null)
                    {
                        PessoaVO pVOTemp = this.SgiDAOT.getPessoa(cVOTemp.idPessoa);
                        if (pVOTemp != null)
                        {
                            pVOLista.Add(pVOTemp);
                        }
                    }
                }
            }

            ddlCaixaAberturaColaboradorSA.DataSource = pVOLista;
            ddlCaixaAberturaColaboradorSA.DataBind();

            ddlAcertoColocaboradorS.DataSource = pVOLista;
            ddlAcertoColocaboradorS.DataBind();

            ddlProvisaoColocaboradorS.DataSource = pVOLista;
            ddlProvisaoColocaboradorS.DataBind();

            ddlSangriaColocaboradorS.DataSource = pVOLista;
            ddlSangriaColocaboradorS.DataBind();


            ddlFechamentoColocaboradorSF.DataSource = pVOLista;
            ddlFechamentoColocaboradorSF.DataBind();
        }

        protected void carregaCaixaMovimentacao()
        {
            if (!lblSelectID.Text.Equals("-") && !lblSelectID.Text.Equals(""))
            {
                List<CaixamvtoVO> cmVOLista = new List<CaixamvtoVO>();

                ColaboradorVO cVO = SgiDAOT.getColaborador(null, null, null, usuarioVO.idPessoa);

                if (cVO == null)
                {
                    Util.ExibeAlertRedirecionamento(this, "Usuário logado não vinculado com um colaborador! Não é possível continuar", "Gestor.aspx");
                }
                else
                {
                    CaixaturnoVO ctVO = this.SgiDAOT.getCaixaturno(null, Convert.ToInt32(lblSelectID.Text), cVO.idColaborador, null, null, null, null, 'A');

                    hfCaixaTurnoId.Value = Convert.ToString(ctVO.idCaixaTurno);

                    if (ctVO != null)
                    {
                        foreach (CaixamvtoVO cmVOItem in this.SgiDAOT.getCaixamvtos(null, null, Convert.ToInt32(lblSelectID.Text), ctVO.idCaixaTurno, null, null, null, null, null, 'A'))
                        {
                            cmVOLista.Add(cmVOItem);
                        }
                    }
                }

                gvMovLista.DataSource = cmVOLista;
                gvMovLista.DataBind();
            }
            else
            {
                Util.ExibeAlert(this, "Selecione um caixa");
            }
        }




        #region Controla Panel

        protected void pnlAberturaHabilita_ModalPopupExtender(bool habilita, string msg)
        {
            if (habilita)
            {
                pnlAbertura.Visible = true;
                pnlAbertura_ModalPopupExtender.Show();

                cbCaixaAberturaColavboradorSA.Checked = false;
                cbCaixaAberturaColavboradorSA_CheckedChanged(null, null);
                ddlCaixaAberturaColaboradorSA.Enabled = true;

                ddlCaixaAberturaColaboradorSA.SelectedValue = "-1";
                txtCaixaAberturaColaboradorSASenha.Text = String.Empty;
                txtCaixaAberturaColaboradorSASenha.Enabled = true;

                lblCaixaAberturaErro.Text = msg;
            }
            else
            {
                pnlAbertura.Visible = false;
                pnlAbertura_ModalPopupExtender.Hide();
            }
        }

        protected void pnlAcertoHabilita_ModalPopupExtender(bool habilita, string msg)
        {
            if (habilita)
            {
                pnlAcerto.Visible = true;
                pnlAcerto_ModalPopupExtender.Show();

                ddlAcertoColocaboradorS.SelectedValue = "-1";
                txtAcertoColocaboradorSSenha.Text = String.Empty;

                lblAcertoErro.Text = msg;
            }
            else
            {
                pnlAcerto.Visible = false;
                pnlAcerto_ModalPopupExtender.Hide();
            }
        }

        protected void pnlProvisaoHabilita_ModalPopupExtender(bool habilita, string msg)
        {
            if (habilita)
            {
                pnlProvisao.Visible = true;
                pnlProvisao_ModalPopupExtender.Show();

                ddlProvisaoColocaboradorS.SelectedValue = "-1";
                txtProvisaoColocaboradorSSenha.Text = String.Empty;
                cbProvisaoResgatarTickt.Checked = false;
                cbProvisaoResgatarTickt_CheckedChanged(null, null);

                lblProvisaoErro.Text = msg;
            }
            else
            {
                pnlProvisao.Visible = false;
                pnlProvisao_ModalPopupExtender.Hide();
            }
        }

        protected void pnlSangriaHabilita_ModalPopupExtender(bool habilita, string msg)
        {
            if (habilita)
            {
                pnlSangria.Visible = true;
                pnlSangria_ModalPopupExtender.Show();

                ddlSangriaColocaboradorS.SelectedValue = "-1";
                txtSangriaColaboradorSSenha.Text = String.Empty;

                lblSangriaErro.Text = msg;
            }
            else
            {
                pnlSangria.Visible = false;
                pnlSangria_ModalPopupExtender.Hide();
            }
        }

        protected void pnlFechamentoHabilita_ModalPopupExtender(bool habilita, string msg)
        {
            if (habilita)
            {
                pnlFechamento.Visible = true;
                pnlFechamento_ModalPopupExtender.Show();

                ddlFechamentoColocaboradorSF.SelectedValue = "-1";
                txtFechamentoColocaboradorSFSenha.Text = String.Empty;

                lblFechamentoErro.Text = msg;
            }
            else
            {
                pnlFechamento.Visible = false;
                pnlFechamento_ModalPopupExtender.Hide();
            }
        }

        #endregion

        #region Abrir Caixa Turno

        protected void btCxDisponivel_Click(object sender, EventArgs e)
        {
            int idCaixa = Convert.ToInt32(((Button)sender).CommandArgument);

            CaixaVO cVO = this.SgiDAOT.getCaixa(idCaixa);

            lblCaixaAberturaId.Text = cVO.PKString;
            lblCaixaAberturaNome.Text = cVO.caixa;
            lblCaixaAberturaSaldo.Text = String.Format("{0:C}", cVO.saldo);


            painelExibido(1, String.Empty);
        }

        protected void cbCaixaAberturaColavboradorSA_CheckedChanged(object sender, EventArgs e)
        {
            int idPessoa = usuarioVO.idPessoaVO.idPessoa;
            ColaboradorVO cVO = this.SgiDAOT.getColaborador(null, null, null, idPessoa);

            if (cVO != null)
            {
                if (cbCaixaAberturaColavboradorSA.Checked)
                {
                    ddlCaixaAberturaColaboradorSA.DataSource = null;
                    ddlCaixaAberturaColaboradorSA.DataSource = this.SgiDAOT.getPessoas(idPessoa);

                    limpaCamposSupervisor(false);

                    ddlCaixaAberturaColaboradorSA.DataBind();
                    ddlCaixaAberturaColaboradorSA.Enabled = false;
                }
                else
                {
                    limpaCamposSupervisor(true);
                    carregaSupervisor();
                    ddlCaixaAberturaColaboradorSA.Enabled = true;
                }
            }
            else
            {
                Util.ExibeAlert(this, "Usuário logado não vinculado com um colaborador!");
                cbCaixaAberturaColavboradorSA.Checked = false;
                carregaSupervisor();
                ddlCaixaAberturaColaboradorSA.Enabled = true;
            }

            pnlAbertura.Visible = true;
            pnlAbertura_ModalPopupExtender.Show();
        }

        protected void btCaixaAberturaAbrir_Click(object sender, EventArgs e)
        {
            AbrirCaixaTurno();
            carregaCaixaMovimentacao();
        }

        protected void AbrirCaixaTurno()
        {
            int idPessoaSA = Convert.ToInt32(ddlCaixaAberturaColaboradorSA.SelectedValue);

            if (cbCaixaAberturaColavboradorSA.Checked || buscaSupervisor(idPessoaSA, txtCaixaAberturaColaboradorSASenha.Text, 1))
            {
                ColaboradorVO cVO = this.SgiDAOT.getColaborador(null, null, null, usuarioVO.idPessoa);

                if (cVO != null)
                {
                    int idCaixa = Convert.ToInt32(lblCaixaAberturaId.Text);

                    CaixaVO cxVO = CaixaVO.CreateVO();

                    cxVO = this.SgiDAOT.getCaixa(idCaixa);
                    cxVO.situacao = 'A';

                    CaixaturnoVO ctVO = CaixaturnoVO.CreateVO();

                    ctVO.idCaixa = cxVO.idCaixa;

                    ctVO.idColaborador = cVO.idColaborador;

                    ctVO.dtAbertura = DateTime.Now;
                    ctVO.saldoAbertura = cxVO.saldo;

                    ctVO.idColaboradorSA = this.SgiDAOT.getColaborador(null, null, null, idPessoaSA).idColaborador;

                    ctVO.situacao = cxVO.situacao;
                    ctVO.cadastradoPor = usuarioVO.user;
                    ctVO.cadastro = DateTime.Now;
                    ctVO.editadoPor = usuarioVO.user;
                    ctVO.edicao = DateTime.Now;

                    try
                    {
                        this.SgiDAOT.transactionBegin();

                        this.SgiDAOT.setCaixa(cxVO);
                        this.SgiDAOT.newCaixaturno(ctVO);

                        this.SgiDAOT.transactionCommit();
                    }
                    catch (Exception ex)
                    {
                        if (this.SgiDAOT != null)
                            this.SgiDAOT.transactionRollBack();
                        Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
                    }


                    carregaCaixas();

                    Button btAberturaTemp = new Button();
                    btAberturaTemp.CommandArgument = Convert.ToString(idCaixa);

                    btCxAberto_Click(btAberturaTemp, null);
                }
                else
                {
                    Util.ExibeAlert(this, "Usuário logado não vinculado com um colaborador! Não é possível fazer a abertura de caixa!");
                }
            }
        }

        #endregion

        protected void btCxAberto_Click(object sender, EventArgs e)
        {
            string commandArgument = ((Button)sender).CommandArgument;

            for (int i = 0; i < dlCxAberto.Items.Count; i++)
            {
                Button btAberto = (Button)dlCxAberto.Items[i].FindControl("btCxAberto");
                Panel pnlCxAberto = (Panel)dlCxAberto.Items[i].FindControl("pnlCxAberto");
                if (btAberto.CommandArgument == commandArgument)
                {
                    btAberto.CssClass = "btCxAbertoAtivo";
                    pnlCxAberto.CssClass = "pnlCxAbertoAtivo";
                    lblSelectID.Text = commandArgument;
                    lblSelectCaixa.Text = this.SgiDAOT.getCaixa(Convert.ToInt32(commandArgument)).caixa;

                    carregaCaixaMovimentacao();
                }
                else
                {
                    btAberto.CssClass = "btCxAbertoDesativado";
                    pnlCxAberto.CssClass = "pnlCxAbertoDesativado";
                }
            }
        }

        #region Acerto

        protected void btAcertoSalvar_Click(object sender, EventArgs e)
        {
            int idPessoaS = Convert.ToInt32(ddlAcertoColocaboradorS.SelectedValue);

            if (buscaSupervisor(idPessoaS, txtAcertoColocaboradorSSenha.Text, 2))
            {
                CaixamvtoVO cmVO = salvaMovimentacao();
                cmVO.idColaboradorS = Convert.ToInt32(ddlAcertoColocaboradorS.SelectedValue);

                try
                {
                    this.SgiDAOT.transactionBegin();

                    this.SgiDAOT.newCaixamvto(cmVO);

                    this.SgiDAOT.transactionCommit();

                }
                catch (Exception ex)
                {
                    if (this.SgiDAOT != null)
                        this.SgiDAOT.transactionRollBack();
                    Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
                }

                pnlAcerto.Visible = false;

                limpaCampos();
                carregaCaixaMovimentacao();
            }
        }

        #endregion

        #region Movimentação

        protected void gvMovLista_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int idCaixaMovimento = int.Parse(((HiddenField)e.Row.FindControl("hfMovListaIdCaixaMovimento")).Value);

                CaixamvtoVO cmVO = this.SgiDAOT.getCaixamvto(idCaixaMovimento);

                Literal ltlMovListaTipo = (Literal)e.Row.FindControl("ltlMovListaTipo");
                Literal ltlMovListaOrigem = (Literal)e.Row.FindControl("ltlMovListaOrigem");

                if (cmVO.natureza == 'C')
                {
                    ltlMovListaTipo.Text = "<img src='App_Themes/Padrao/Imagens/backoffice/tipoVerde.png' />&nbsp;Cr&eacute;dito";
                    totalCredito += cmVO.valor;
                }
                else
                {
                    ltlMovListaTipo.Text = "<img src='App_Themes/Padrao/Imagens/backoffice/tipoVermelho.png' />&nbsp;D&eacute;dito";
                    totalDebito += cmVO.valor;
                }

                switch (cmVO.origem)
                {
                    case 'A':
                        ltlMovListaOrigem.Text = "<img src='App_Themes/Padrao/Imagens/backoffice/icoAcerto.png' />&nbsp;Acerto";
                        break;
                    case 'M':
                        ltlMovListaOrigem.Text = "<img src='App_Themes/Padrao/Imagens/backoffice/icoMovimentacao1.png' />&nbsp;Movimento";
                        break;
                    case 'P':
                        ltlMovListaOrigem.Text = "<img src='App_Themes/Padrao/Imagens/backoffice/icoProvisao.png' />&nbsp;Provis&atilde;o";
                        break;
                    case 'S':
                        ltlMovListaOrigem.Text = "<img src='App_Themes/Padrao/Imagens/backoffice/icoSangria.png' />&nbsp;Sangria";
                        break;
                    default:
                        ltlMovListaOrigem.Text = "<img src='App_Themes/Padrao/Imagens/backoffice/icoMovimentacao.png' />&nbsp;Movimento";
                        break;
                }
            }

            totalMov();
        }

        protected void totalMov()
        {
            lblTotalCredito.Text = String.Format("<img src='App_Themes/Padrao/Imagens/backoffice/tipoVerde.png' />&nbsp;Cr&eacute;dito = {0:c}", totalCredito);
            lblTotalDebito.Text = String.Format("<img src='App_Themes/Padrao/Imagens/backoffice/tipoVermelho.png' />&nbsp;D&eacute;dito = {0:c}", totalDebito);

            total = totalCredito - totalDebito;

            lblTotal.Text = String.Format("<img src='App_Themes/Padrao/Imagens/backoffice/icoTotal.png' />&nbsp;Total = {0:c}", total);
        }

        protected void rbgMovOrigem_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (rbgMovOrigem.SelectedValue)
            {
                case "A":
                    rbgMovNatureza.Enabled = true;
                    break;
                case "M":
                    rbgMovNatureza.Enabled = true;
                    break;
                case "P":
                    rbgMovNatureza.Enabled = false;
                    rbgMovNatureza.SelectedValue = "C";
                    break;
                case "S":
                    rbgMovNatureza.Enabled = false;
                    rbgMovNatureza.SelectedValue = "D";
                    break;
                default:
                    break;
            }
        }

        protected void btnMovSalvar_Click(object sender, EventArgs e)
        {
            if (!lblSelectID.Text.Equals("-") && !lblSelectID.Text.Equals("") && !String.IsNullOrEmpty(hfCaixaTurnoId.Value))
            {
                switch (rbgMovOrigem.SelectedValue)
                {
                    case "A":
                        painelExibido(2, String.Empty);
                        break;
                    case "M":
                        this.SgiDAOT.newCaixamvto(salvaMovimentacao());
                        limpaCampos();
                        carregaCaixaMovimentacao();
                        break;
                    case "P":
                        painelExibido(3, String.Empty);
                        break;
                    case "S":
                        painelExibido(4, String.Empty);
                        break;
                    default:
                        this.SgiDAOT.newCaixamvto(salvaMovimentacao());
                        break;
                }
            }
            else
            {
                Util.ExibeAlert(this, "Selecione um caixa");
            }

        }

        protected CaixamvtoVO salvaMovimentacao()
        {
            CaixamvtoVO cmVO = null;

            if (verificaCampoSelecionado())
            {
                ColaboradorVO cVO = SgiDAOT.getColaborador(null, null, null, usuarioVO.idPessoa);

                if (cVO == null)
                {
                    Util.ExibeAlertRedirecionamento(this, "Usuário logado não vinculado com um colaborador! Não é possível continuar", "Gestor.aspx");
                }
                else
                {
                    cmVO = CaixamvtoVO.CreateVO();

                    cmVO.idCaixa = Convert.ToInt32(lblSelectID.Text);
                    cmVO.idCaixaTurno = Convert.ToInt32(hfCaixaTurnoId.Value);
                    cmVO.dtMvto = DateTime.Now;
                    cmVO.mvto = txtMovDescricao.Text;
                    cmVO.nrDoc = txtMovDocumento.Text;
                    cmVO.natureza = Convert.ToChar(rbgMovNatureza.SelectedValue);
                    cmVO.valor = Convert.ToDecimal(txtMovValor.Text);

                    cmVO.origem = Convert.ToChar(rbgMovOrigem.SelectedValue);
                    cmVO.situacao = 'A';

                    cmVO.cadastradoPor = usuarioVO.user;
                    cmVO.cadastro = DateTime.Now;
                    cmVO.editadoPor = usuarioVO.user;
                    cmVO.edicao = DateTime.Now;

                    return cmVO;
                }
            }
            else
            {
                Util.ExibeAlert(this, "Selecione um caixa");
            }

            return cmVO;
        }

        protected void btnMovCancelar_Click(object sender, EventArgs e)
        {
            limpaCampos();
        }

        protected void limpaCampos()
        {
            txtMovDescricao.Text = String.Empty;
            txtMovDocumento.Text = String.Empty;
            rbgMovOrigem.SelectedValue = "M";
            rbgMovOrigem_SelectedIndexChanged(null, null);
            txtMovValor.Text = String.Empty;
        }

        #endregion

        #region Provião

        protected TicketfinVO provisaoTicket()
        {
            TicketfinVO tfVO = this.SgiDAOT.getTicketfin(Convert.ToInt32(ddlProvisaoTicket.SelectedValue));
            tfVO.dtAcolhimento = DateTime.Now;
            tfVO.situacao = 'A';
            tfVO.editadoPor = usuarioVO.user;
            tfVO.edicao = DateTime.Now;

            return tfVO;
        }

        protected void cbProvisaoResgatarTickt_CheckedChanged(object sender, EventArgs e)
        {
            List<TicketfinVO> tfVOLista = new List<TicketfinVO>();

            lblProvisaoErro.Text = String.Empty;

            if (cbProvisaoResgatarTickt.Checked)
            {
                tfVOLista.AddRange(this.SgiDAOT.getTicketfins(null, null, usuarioVO.idPessoaVO.idFilial, null, null, null, 'T'));

                if (tfVOLista.Count > 0)
                {

                    ddlProvisaoTicket.Enabled = true;
                    ddlProvisaoTicket.DataValueField = "PKString";
                    ddlProvisaoTicket.DataTextField = "toString";
                    ddlProvisaoTicket.DataSource = tfVOLista;
                    ddlProvisaoTicket.DataBind();
                }
                else
                {
                    ddlProvisaoTicket.Enabled = false;
                    CarregaDDL.carregaNULL(ddlProvisaoTicket);

                    cbProvisaoResgatarTickt.Checked = false;

                    lblProvisaoErro.Text = "Nenhum Ticket Encontrado!";
                }
            }
            else
            {
                ddlProvisaoTicket.Enabled = false;
                CarregaDDL.carregaNULL(ddlProvisaoTicket);

                cbProvisaoResgatarTickt.Checked = false;
            }

            pnlProvisao.Visible = true;
            pnlProvisao_ModalPopupExtender.Show();
        }

        protected void btProvisaoSalvar_Click(object sender, EventArgs e)
        {
            int idPessoaS = Convert.ToInt32(ddlProvisaoColocaboradorS.SelectedValue);

            if (buscaSupervisor(idPessoaS, txtProvisaoColocaboradorSSenha.Text, 3))
            {
                CaixamvtoVO cmVO = salvaMovimentacao();
                cmVO.idColaboradorS = Convert.ToInt32(ddlProvisaoColocaboradorS.SelectedValue);

                try
                {
                    this.SgiDAOT.transactionBegin();

                    if (cbProvisaoResgatarTickt.Checked)
                    {
                        TicketfinVO tfVO = provisaoTicket();
                        cmVO.nrDoc = "Ticket: " + tfVO.idTicketFin;
                        cmVO.valor = tfVO.valor;

                        int idCaixamvtoNew = (int)this.SgiDAOT.newCaixamvto(cmVO);

                        tfVO.idCaixaMovtoA = idCaixamvtoNew;

                        this.SgiDAOT.setTicketfin(tfVO);
                    }
                    else
                    {
                        this.SgiDAOT.newCaixamvto(cmVO);
                    }

                    this.SgiDAOT.transactionCommit();

                }
                catch (Exception ex)
                {
                    if (this.SgiDAOT != null)
                        this.SgiDAOT.transactionRollBack();
                    Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
                }

                limpaCampos();
                carregaCaixaMovimentacao();
            }
        }

        #endregion

        #region Sangria

        protected TicketfinVO sangriaTicket(decimal valorTicket, int idCaixaMovimento)
        {
            TicketfinVO tf = TicketfinVO.CreateVO();

            tf.dtTicketFin = DateTime.Now;
            tf.origem = "CAIXA";
            tf.finalidade = "SANGRIA";
            tf.situacao = 'T';
            tf.valor = valorTicket;
            tf.idFilial = usuarioVO.idPessoaVO.idFilial;
            tf.idCaixaMovto = idCaixaMovimento;
            tf.cadastradoPor = usuarioVO.user;
            tf.cadastro = DateTime.Now;
            tf.editadoPor = usuarioVO.user;
            tf.edicao = DateTime.Now;

            return tf;
        }

        protected MvtofinVO sangriaMvtofin(CaixamvtoVO caixamvtoVO)
        {
            MvtofinVO mvtofinVO = MvtofinVO.CreateVO();
            mvtofinVO.idFilial = usuarioVO.idPessoaVO.idFilial;
            mvtofinVO.idCaixa = caixamvtoVO.idCaixa;
            mvtofinVO.dtMvtoFin = DateTime.Now;
            mvtofinVO.valor = caixamvtoVO.valor;
            mvtofinVO.valorJuro = 0;
            mvtofinVO.valorDesc = 0;
            mvtofinVO.valorPago = 0;
            mvtofinVO.natureza = 'C';

            mvtofinVO.cadastradoPor = usuarioVO.user;
            mvtofinVO.cadastro = DateTime.Now;
            mvtofinVO.editadoPor = usuarioVO.user;
            mvtofinVO.edicao = DateTime.Now;

            return mvtofinVO;
        }

        protected void btSangriaSalvar_Click(object sender, EventArgs e)
        {
            int idPessoaS = Convert.ToInt32(ddlSangriaColocaboradorS.SelectedValue);

            if (buscaSupervisor(idPessoaS, txtSangriaColaboradorSSenha.Text, 4))
            {
                CaixamvtoVO cmVO = salvaMovimentacao();
                cmVO.idColaboradorS = Convert.ToInt32(ddlSangriaColocaboradorS.SelectedValue);

                try
                {
                    this.SgiDAOT.transactionBegin();

                    if (cbSangriaTicketGerar.Checked)
                        this.SgiDAOT.newTicketfin(sangriaTicket(Convert.ToDecimal(txtMovValor.Text), (int)this.SgiDAOT.newCaixamvto(cmVO)));
                    else
                    {
                        this.SgiDAOT.newCaixamvto(cmVO);
                        this.SgiDAOT.newMvtofin(sangriaMvtofin(cmVO));
                    }

                    this.SgiDAOT.transactionCommit();

                }
                catch (Exception ex)
                {
                    if (this.SgiDAOT != null)
                        this.SgiDAOT.transactionRollBack();
                    Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
                }

                limpaCampos();
                carregaCaixaMovimentacao();
            }
        }

        #endregion

        #region Fechamento

        protected void btFechamento_Click(object sender, ImageClickEventArgs e)
        {
            if (!lblSelectID.Text.Equals("-") && !lblSelectID.Text.Equals("") && !String.IsNullOrEmpty(hfCaixaTurnoId.Value))
            {
                painelExibido(5, String.Empty);
            }
            else
            {
                Util.ExibeAlert(this, "Selecione um caixa");
            }
        }

        protected CaixaVO fechamentoCaixa(decimal saldoFinal)
        {
            CaixaVO cxVO = this.SgiDAOT.getCaixa(Convert.ToInt32(lblSelectID.Text));
            cxVO.situacao = 'F';
            cxVO.saldo = cxVO.saldo + saldoFinal;

            cxVO.editadoPor = usuarioVO.user;
            cxVO.edicao = DateTime.Now;

            return cxVO;
        }

        protected CaixaturnoVO fechamentoCaixaTurno(decimal saldoFinal)
        {
            CaixaturnoVO ctVO = this.SgiDAOT.getCaixaturno(Convert.ToInt32(hfCaixaTurnoId.Value));
            ctVO.situacao = 'F';
            ctVO.idColaboradorSF = this.SgiDAOT.getColaborador(null, null, null, Convert.ToInt32(ddlFechamentoColocaboradorSF.SelectedValue)).idColaborador;
            ctVO.saldoFechamento = ctVO.saldoAbertura + saldoFinal;
            ctVO.dtFechamento = DateTime.Now;

            ctVO.editadoPor = usuarioVO.user;
            ctVO.edicao = DateTime.Now;

            return ctVO;

        }

        protected CaixamvtoVO fechamentoCaixaMovimento(int idCaixaMovimento)
        {
            CaixamvtoVO cmVO = this.SgiDAOT.getCaixamvto(idCaixaMovimento);
            cmVO.situacao = 'F';

            if (cmVO.natureza == 'C')
            {
                totalCredito += cmVO.valor;
            }
            else
            {
                totalDebito += cmVO.valor;
            }

            return cmVO;
        }

        protected void btFechamentoSalvar_Click(object sender, EventArgs e)
        {
            int idPessoaSF = Convert.ToInt32(ddlFechamentoColocaboradorSF.SelectedValue);

            if (buscaSupervisor(idPessoaSF, txtFechamentoColocaboradorSFSenha.Text, 5))
            {
                try
                {
                    this.SgiDAOT.transactionBegin();

                    foreach (GridViewRow row in gvMovLista.Rows)
                    {
                        int idCaixaMovimentacao = Convert.ToInt32(((HiddenField)row.FindControl("hfMovListaIdCaixaMovimento")).Value);
                        this.SgiDAOT.setCaixamvto(fechamentoCaixaMovimento(idCaixaMovimentacao));
                    }

                    CaixaVO caixaVO = fechamentoCaixa(totalCredito - totalDebito);

                    this.SgiDAOT.setCaixa(caixaVO);
                    this.SgiDAOT.setCaixaturno(fechamentoCaixaTurno(totalCredito - totalDebito));

                    this.SgiDAOT.transactionCommit();
                }
                catch (Exception ex)
                {
                    if (this.SgiDAOT != null)
                        this.SgiDAOT.transactionRollBack();
                    Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
                }

                Response.Redirect("~/CaixaOperacional.aspx");
            }
        }

        #endregion





        protected void limpaCamposSupervisor(bool condicao)
        {
            txtCaixaAberturaColaboradorSASenha.Enabled = condicao;
            txtCaixaAberturaColaboradorSASenha.Text = String.Empty;
            rfvTxtCaixaAberturaColaboradorSASenha.Enabled = condicao;
        }

        protected bool buscaSupervisor(int idPessoa, string senha, int indicePainel)
        {
            List<UsuarioVO> uVOLista = this.SgiDAOT.getUsuarios(null, idPessoa, null, true, usuarioVO.idPessoaVO.idFilial, null);

            if (uVOLista.Count > 0)
            {
                foreach (UsuarioVO uVOItem in uVOLista)
                {
                    if (uVOItem.pass == senha)
                    {
                        painelExibido(0, String.Empty);
                        return true;
                    }
                }
                painelExibido(indicePainel, "Senha do supervisor incorreta!");

                return false;
            }
            else
            {
                painelExibido(indicePainel, "Senha do supervisor incorreta!");
                return false;
            }
        }

        protected void painelExibido(int indicePainel, string msg)
        {
            pnlAberturaHabilita_ModalPopupExtender(indicePainel == 1 ? true : false, indicePainel == 1 ? msg : String.Empty);
            pnlAcertoHabilita_ModalPopupExtender(indicePainel == 2 ? true : false, indicePainel == 2 ? msg : String.Empty);
            pnlProvisaoHabilita_ModalPopupExtender(indicePainel == 3 ? true : false, indicePainel == 3 ? msg : String.Empty);
            pnlSangriaHabilita_ModalPopupExtender(indicePainel == 4 ? true : false, indicePainel == 4 ? msg : String.Empty);
            pnlFechamentoHabilita_ModalPopupExtender(indicePainel == 5 ? true : false, indicePainel == 5 ? msg : String.Empty);
        }

        protected bool verificaCampoSelecionado()
        {
            if (lblSelectID.Text.Equals("-") || String.IsNullOrEmpty(lblSelectID.Text) && !String.IsNullOrEmpty(hfCaixaTurnoId.Value))
            {
                painelExibido(0, String.Empty);

                return false;
            }
            return true;
        }

        protected void gvMovLista_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.gvMovLista.PageIndex = e.NewPageIndex;
            carregaCaixaMovimentacao();
        }




    }
}